MySQL 替换 ROW 您所在的位置:网站首页 mysql实现rownumber over MySQL 替换 ROW

MySQL 替换 ROW

2024-07-11 18:19| 来源: 网络整理| 查看: 265

实现分组后在组内排序的功能 说明1、ROW_NUMBER() OVER (PARTITION ……)函数实现2、MySql 实现

说明

  SQL Server 数据库函数 ROW_NUMBER() OVER (PARTITION ……)函数,使用MySQL替换。   实现分组后在组内排序的功能。  

1、ROW_NUMBER() OVER (PARTITION ……)函数实现

 

ROW_NUMBER() OVER ( PARTITION BY 列名1 ORDER BY 列名2 DESC)

 

ROW_NUMBER() OVER(PARTITION BY 列名1 ORDER BY 列名2 DESC)的使用        该组合函数表示,根据 列名1 分组,然后在分组内部根据 列名2 排序,而此函 数计算的值就表示每组内部排序后的顺序编号,可以用于去重复值

  表结构及数据 :   在这里插入图片描述   实现脚本 :  

SELECT stu_name,subj,score,grade, ROW_NUMBER () OVER ( PARTITION BY grade,stu_name ORDER BY score DESC ) NO FROM t_users;

  运行结果 :   在这里插入图片描述  

2、MySql 实现

 

       要实现的功能是,找出各班每个学生各科成绩排名。例如:一班的张三,其各科成绩的排名,查看该学生的强项科目和弱项科目。          不要在意示例中的业务场景,该学生分数场景仅供函数参考用。

  表数据 :   在这里插入图片描述   MySQL 脚本 :  

SELECT stu_name,subj,score,grade,NO FROM ( SELECT tmp.stu_name,tmp.subj,tmp.score, tmp.grade ,@rownum := @rownum + 1, # 定义了两个个参数 tmp.stu_nam 和 tmp.grade,通过if函数判断, # 当这两个参数与查询出来的数据一样的时候,我们自增,不然那就从1开始重新计数 IF ( @pjan = tmp.stu_name AND @grade = tmp.grade, @rank :=@rank + 1 ,@rank := 1 ) AS NO, @pjan := tmp.stu_name, @grade := tmp.grade FROM ( SELECT stu_name,subj,score,grade FROM t_users ORDER BY # 注意 ORDER BY 的参数顺序 grade,stu_name,score DESC ) tmp, ( SELECT @rownum := 0, @grade := NULL ,@pjan := NULL ,@rank := 0 ) a ) result;

  运行结果 :   在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有